Made babl_hash_table_find thread safe by making find_func an argument.
authorØyvind Kolås <pippin@gimp.org>
Sat, 21 Nov 2009 16:05:00 +0000 (16:05 +0000)
committerØyvind Kolås <pippin@gimp.org>
Sat, 21 Nov 2009 16:07:34 +0000 (16:07 +0000)
babl/babl-db.c
babl/babl-fish.c
babl/babl-hash-table.c
babl/babl-hash-table.h

index 74413d88e42510afe479a67cdbe92f243ad734d5..db0b45b4766d6631fb410734046215641ae3cbaa 100644 (file)
@@ -82,13 +82,18 @@ Babl *
 babl_db_find (BablDb     *db,
               const char *name)
 {
-  return babl_hash_table_find (db->name_hash, babl_hash_by_str (db->name_hash, name), (void *) name);
+  Babl *ret;
+  ret = babl_hash_table_find (db->name_hash, babl_hash_by_str (db->name_hash, name),
+                              NULL, (void *) name);
+  return ret;
 }
 
 int
 babl_db_count (BablDb *db)
 {
-  return db->babl_list->count;
+  int ret;
+  ret = db->babl_list->count;
+  return ret;
 }
 
 Babl *
@@ -104,7 +109,6 @@ babl_db_insert (BablDb *db,
   * place to brand them with where the item came from. */
   item->instance.creator = babl_extender ();
   return item;
-
 }
 
 void
@@ -121,22 +125,29 @@ babl_db_exist (BablDb     *db,
                int        id,
                const char *name)
 {
+  Babl *ret;
   if (id)
-    return babl_hash_table_find (db->id_hash, babl_hash_by_int (db->id_hash, id), &id);
-  return babl_hash_table_find (db->name_hash, babl_hash_by_str (db->name_hash, name), (void *) name);
+    ret = babl_hash_table_find (db->id_hash, babl_hash_by_int (db->id_hash, id), NULL, &id);
+  else 
+    ret = babl_hash_table_find (db->name_hash, babl_hash_by_str (db->name_hash, name), NULL, (void *) name);
+  return ret;
 }
 
 Babl *
 babl_db_exist_by_id (BablDb *db,
                      int    id)
 {
-  return  babl_hash_table_find (db->id_hash, babl_hash_by_int (db->id_hash, id),  &id);
+  Babl *ret;
+  ret = babl_hash_table_find (db->id_hash, babl_hash_by_int (db->id_hash, id), NULL, &id);
+  return ret;
 }
 
 Babl *
 babl_db_exist_by_name (BablDb     *db,
                        const char *name)
 {
-  return  babl_hash_table_find (db->name_hash, babl_hash_by_str (db->name_hash, name), (void *) name);
+  Babl *ret;
+  ret = babl_hash_table_find (db->name_hash, babl_hash_by_str (db->name_hash, name),
+                              NULL, (void *) name);
+  return ret;
 }
-
index ae25bcb462b24b2b6f71dddf46120e9362df71a1..d2cda12d583e515e41b789515184faf5c47ce0d2 100644 (file)
@@ -211,8 +211,7 @@ babl_fish (const void *source,
         /* In the case of equal source and destination formats
          * we will search through the fish database for reference fish
          * to handle the memcpy */
-        id_htable->find_func = find_memcpy_fish;
-        babl_hash_table_find (id_htable, hashval, (void *) &ffish);
+        babl_hash_table_find (id_htable, hashval, find_memcpy_fish, (void *) &ffish);
       }
     else
       {
@@ -229,8 +228,7 @@ babl_fish (const void *source,
          * insert it into the fish database to indicate non-existent fish
          * path.
          */
-        id_htable->find_func = find_fish_path;
-        babl_hash_table_find (id_htable, hashval, (void *) &ffish);
+        babl_hash_table_find (id_htable, hashval, find_fish_path, (void *) &ffish);
 
         if (ffish.fish_path)
           {
index a9c5debdd177383eed2633b9bd36f780cd5c9cd0..a3f83647bebcca811bff445c8a46a60fc6d7dd24 100644 (file)
@@ -194,9 +194,10 @@ babl_hash_table_insert (BablHashTable *htab,
 }
 
 Babl *
-babl_hash_table_find (BablHashTable *htab,
-                      int           hash,
-                      void          *data)
+babl_hash_table_find (BablHashTable       *htab,
+                      int                  hash,
+                      BablHashFindFunction find_func,
+                      void                *data)
 {
   int  it;
   Babl *item;
@@ -211,7 +212,12 @@ babl_hash_table_find (BablHashTable *htab,
 
   for (;;)
     {
-      if (htab->find_func (item, data))
+      if (find_func)
+        {
+          if (find_func (item, data))
+            return item;
+        }
+      else if (htab->find_func (item, data))
         return item;
       it = htab->chain_table[it];
       if (it == -1)
index 881d1d612ec11075406c88144f77d9dea6f66bd3..ec546f36cad4a2bd49ec13541a5ddc16ca44fdca 100644 (file)
@@ -60,9 +60,10 @@ babl_hash_table_insert (BablHashTable *htab,
                         Babl          *item);
 
 Babl *
-babl_hash_table_find (BablHashTable *htab,
-                      int           hash,
-                      void          *data);
+babl_hash_table_find (BablHashTable       *htab,
+                      int                  hash,
+                      BablHashFindFunction find_func,
+                      void                *data);
 
 void
 babl_hash_table_destroy (BablHashTable *htab);